home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 April: Mac OS SDK / Dev.CD Apr 96 SDK / Dev.CD Apr 96 SDK1.toast / Development Kits (Disc 1) / OpenDoc / Sample Code / CALib & You… / Source / CALib / Implementation / ProxyPart / CAProxyPart.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-12-07  |  14.6 KB  |  445 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        CAProxyPart.h
  3.  
  4.     Contains:    CAProxyPart CALib proxy part editor class definition.
  5.  
  6.     Written by:    Rick Badertscher, Steve Foley AND PartMaker
  7.  
  8.     Change History (most recent first):
  9.     
  10.          <3>    11/18/95    RB        Major strip down. Removed many obsolete methods.
  11.          <2>    11/10/95    RB        Removed some obsolete methods.   
  12.          <1>    6/15-6/30    RB        Major rewrite.  
  13.  
  14.         ------------------------------------------------------------------------------
  15.  
  16.          <24>     5/16/95    SJF        Add UTIL_ContainerAddNewFrame and 
  17.                                      UTIL_ContainerAdjustFrameShape routines
  18.          <17>     5/15/95    RB        Adding EXTN_InstallCAFrameShapeHandler,
  19.                                      EXTN_InstallCAFrameAddedHandler,
  20.                                      and EXTN_InstallCAEventInEmbeddedHandler
  21.  
  22.         <16>      5/12/95    RB        Added EXTN_SetSelected, EXTN_SetHighlight
  23.                                     Modifications for new selection implementation.
  24.                                     
  25.         <15>      5/8/95    SJF        Remove DocRef from the DnD setup calls
  26.         <14>      5/6/95    SJF        WWDC bug fix session with Rick, add some more clone
  27.                                     utilities to support Drag & Drop
  28.         <11>      4/7/95    SJF        CreateLink now returns an ODLinkSource*.
  29.                                     Saw this one in Nice. New idl files for
  30.                                     b1c14 specify the ODLinkSource* type
  31.          <8>     4/02/95    RB        Integrating changes for b1c14 build
  32.          <7>     4/01/95    RB        Adding support for CAWindowActivateHandler()
  33.          <6>     3/30/95    RB        Added method UTIL_HandleActivateEvent
  34.          <5>     3/15/95    SJF        Add support for CAProxyExtension
  35.          <3+>     2/20/95    SJF        Mergin in changes from RickB
  36.          <3>     2/13/95    SJF        Interim checkin to update project database
  37.          <0>    10/16/94    SJF        first written
  38.          
  39.     To Do:
  40.         implement
  41.  
  42. */
  43.  
  44. #ifndef _CAPROXYPART_
  45. #define _CAPROXYPART_
  46.  
  47. #define    USE_CA_SEGMENTS    // Enable segmentation directives for all files
  48.  
  49. #ifndef __DRAG__
  50. #include <Drag.h>            // For DragTrackingHandler type, etc.
  51. #endif
  52.  
  53. #ifndef _ODTYPES_
  54. #include <ODTypes.h>
  55. #endif
  56.  
  57. #ifndef _PLFMFILE_
  58. #include <PlfmFile.h>
  59. #endif
  60.  
  61. #ifndef SOM_ODObjectSpec_xh
  62. #include <ODObjSpc.xh>
  63. #endif
  64.  
  65. #ifndef _FACETLIST_
  66. #include "FacetList.h"
  67. #endif
  68.  
  69. #ifndef SOM_CAProxyExtension_xh
  70. #include "CAProxyExtension.xh"
  71. #endif
  72.  
  73.  
  74. /*——————————————————————————————————————————————————————————————————————————————
  75. • Things that Parts are factories for:
  76.  
  77.     ODExtension                    ODPart::AcquireExtension()
  78.     ODEmbeddedFramesIterator    ODPart::CreateEmbeddedFramesIterator()
  79.     ODDispatchModule            <none needed>
  80.     ODFocusModule                <none needed>
  81.  
  82.  *——————————————————————————————————————————————————————————————————————————————
  83.  */
  84.  
  85. //==============================================================================
  86. // Constants
  87. //==============================================================================
  88.  
  89. #define kNoBias            kODNULL
  90.  
  91. #define kHandCursor                283
  92. #define kClosedHandCursor        284
  93.  
  94. //==============================================================================
  95. // Forward declarations
  96. //==============================================================================
  97.  
  98. class ODFocusSet;
  99. class ODMenuBar;
  100. class ODSession;
  101. class ODWindow;
  102. class ODFrame;
  103. class ODFacet;
  104. class ODShape;
  105. class ODStorageUnit;
  106. class ODStorageUnitView;
  107. class ODEmbeddedFramesIterator;
  108. class ODLink;
  109. class ODLinkSource;
  110. class ODTypeList;
  111. class ODPart;
  112. class ODDragItemIterator;
  113. class ODCanvas;
  114. class ODExtension;
  115. class ODTransform;
  116. class OrderedCollection;
  117.  
  118. class CAProxyExtension;
  119. class FacetList;
  120.  
  121. //==============================================================================
  122. // Constants
  123. //==============================================================================
  124.  
  125. #define        kODStorageUnitRefLen        4
  126.  
  127. //==============================================================================
  128. // Types
  129. //==============================================================================
  130.  
  131. class PartInfo
  132. {
  133.     public:
  134.             
  135.                             PartInfo()     {fHasSelectionFocus = kODFalse; fNeedsActivating = kODTrue;}
  136.         
  137.         inline    void        SetFrameActive(    ODBoolean active)        {fHasSelectionFocus = active;}
  138.         inline    ODBoolean    IsFrameActive(    void)                    {return fHasSelectionFocus;}
  139.         inline    void        SetNeedsActivating(    ODBoolean value)    {fNeedsActivating = value;}
  140.         inline    ODBoolean    GetNeedsActivating(    void)                {return fNeedsActivating;}
  141.     
  142.     private:
  143.                 ODBoolean    fHasSelectionFocus;
  144.                 ODBoolean    fNeedsActivating;
  145. };
  146.  
  147.  
  148. class CFrameInfo
  149. {
  150.     public:
  151.         
  152.                     CFrameInfo (Environment* ev, ODID frameID, ODDraft* draft);
  153.                     ~CFrameInfo ();
  154.                     
  155.                     void        Internalize (void);
  156.                     void        Externalize (ODStorageUnit* su);
  157.                     ODFrame*    GetFrame(void);
  158.                     void        Close(void);
  159.         virtual     void        Remove(void);
  160.                     ODID        GetID(void);
  161.         
  162.     protected:
  163.         
  164.         ODID            fFrameID;
  165.         ODFrame*        fFrame;
  166.         ODDraft*        fDraft;
  167.         Environment*    fEv;
  168.  
  169. };
  170.  
  171. class CDisplayFrameInfo
  172. {
  173.     public:
  174.         
  175.         CDisplayFrameInfo (Environment* ev, ODFrame* frame);
  176.         ~CDisplayFrameInfo ();
  177.     
  178.         inline        ODFrame*    GetFrame(void)        {return fFrame;}
  179.         inline        ODID        GetID(void)            {return fFrameID;}
  180.  
  181.     protected:
  182.         
  183.         ODID            fFrameID;
  184.         ODFrame*        fFrame;
  185.         Environment*    fEv;
  186.  
  187.         
  188. };
  189.  
  190. //==============================================================================
  191. // CAProxyPart
  192. //==============================================================================
  193.  
  194. class CAProxyPart
  195. {
  196. public:
  197.                 CAProxyPart();
  198.                 ~CAProxyPart();
  199.     
  200. public:
  201.  
  202.     // • ODObject •
  203.     ODBoolean        HasExtension(Environment* ev, ODType extensionName);
  204.     ODExtension*    AcquireExtension(Environment* ev, ODType extensionName);
  205.     void            ReleaseExtension(Environment* ev, ODExtension* extension);
  206.     ODSize            Purge(Environment* ev, ODSize size);
  207.  
  208.     // • ODRefCntObject •
  209.     void            Release(Environment* ev);
  210.     
  211.     // • ODPersistentObject •
  212.     void            CloneInto(Environment* ev, ODDraftKey key, ODStorageUnit* toSU, ODFrame* scope);
  213.  
  214.     // • DragAndDrop •
  215.     void            FulfillPromise(Environment* ev, ODStorageUnitView *promiseSUView);
  216.     void            DropCompleted (Environment* ev, ODPart* destPart, ODDropResult dropResult);
  217.     ODDragResult    DragEnter     (Environment* ev, ODDragItemIterator* dragInfo, ODFacet* facet,
  218.                                                     ODPoint* where);
  219.     ODDragResult    DragWithin    (Environment* ev, ODDragItemIterator* dragInfo, ODFacet* facet,
  220.                                                     ODPoint* where);
  221.     void            DragLeave     (Environment* ev, ODFacet* facet, ODPoint* where);
  222.     ODDropResult    Drop          (Environment* ev, ODDragItemIterator* dropInfo, ODFacet* facet,
  223.                                                     ODPoint* where);
  224.  
  225.     // • Embedding •
  226.     void            ContainingPartPropertiesUpdated(Environment* ev, ODFrame* frame,
  227.                                                                      ODStorageUnit* propertyUnit);
  228.     ODStorageUnit*    AcquireContainingPartProperties    (Environment* ev, ODFrame* frame);
  229.  
  230.     ODBoolean        RevealFrame                    (Environment* ev, ODFrame* embeddedFrame,
  231.                                                                      ODShape* revealShape);
  232.     void            EmbeddedFrameSpec              (Environment* ev, ODFrame* embeddedFrame,
  233.                                                                      ODObjectSpec* spec);
  234.     ODEmbeddedFramesIterator*
  235.                     CreateEmbeddedFramesIterator   (Environment* ev, ODFrame* frame);
  236.  
  237.     // • Frame •
  238.     void            DisplayFrameAdded    (Environment* ev, ODFrame* frame);
  239.     void            DisplayFrameRemoved (Environment* ev, ODFrame* frame);
  240.     void            DisplayFrameConnected (Environment* ev, ODFrame* frame);
  241.     void            DisplayFrameClosed  (Environment* ev, ODFrame* frame);
  242.     void            AttachSourceFrame   (Environment* ev, ODFrame* frame, ODFrame* sourceFrame);
  243.     void            FrameShapeChanged   (Environment* ev, ODFrame* frame);
  244.     void            ViewTypeChanged     (Environment* ev, ODFrame* frame);
  245.     void            PresentationChanged (Environment* ev, ODFrame* frame);
  246.     void            SequenceChanged     (Environment* ev, ODFrame* frame);
  247.     void            WritePartInfo       (Environment* ev, ODInfoType partInfo,
  248.                                                       ODStorageUnitView* storageUnitView);
  249.     ODInfoType        ReadPartInfo        (Environment* ev, ODFrame* frame,
  250.                                                       ODStorageUnitView* storageUnitView);
  251.  
  252.     void            ClonePartInfo(            Environment* ev,
  253.                                             ODDraftKey key,
  254.                                             ODInfoType partInfo,
  255.                                             ODStorageUnitView* storageUnitView,
  256.                                             ODFrame* scope);
  257.  
  258.     ODFrame*        RequestEmbeddedFrame(Environment* ev, ODFrame* containingFrame, ODFrame* baseFrame,
  259.                                                       ODShape* frameShape, ODPart* embedPart,
  260.                                                       ODTypeToken viewType, ODTypeToken presentation,
  261.                                                        ODBoolean isOverlaid);
  262.     void            RemoveEmbeddedFrame (Environment* ev, ODFrame* embeddedFrame);
  263.     ODShape*        RequestFrameShape   (Environment* ev, ODFrame* embeddedFrame, ODShape* frameShape);
  264.     void            UsedShapeChanged    (Environment* ev, ODFrame* embeddedFrame);
  265.     ODShape*        AdjustBorderShape   (Environment* ev, ODFacet* embeddedFacet, ODShape* shape);
  266.  
  267.     // • Facet •
  268.     void            FacetAdded     (Environment* ev, ODFacet* facet);
  269.     void            FacetRemoved   (Environment* ev, ODFacet* facet);
  270.     void            CanvasChanged  (Environment* ev, ODFacet* facet);
  271.     void            GeometryChanged(Environment* ev, ODFacet* facet, ODBoolean clipShapeChanged,
  272.                                      ODBoolean externalTransformChanged);
  273.  
  274.     // • Imaging •
  275.     void            CanvasUpdated     (Environment* ev, ODCanvas* canvas);
  276.     void            HighlightChanged  (Environment* ev, ODFacet* facet);
  277.     ODULong            GetPrintResolution(Environment* ev, ODFrame* frame);
  278.  
  279.     // • Linking •
  280.     ODLinkSource*    CreateLink          (Environment* ev, ODByteArray* data);
  281.     void            LinkUpdated         (Environment* ev, ODLink* updatedLink, ODUpdateID id);
  282.     void            RevealLink          (Environment* ev, ODLinkSource* linkSource);
  283.     void            EmbeddedFrameUpdated(Environment* ev, ODFrame* frame, ODUpdateID change);
  284.     void            LinkStatusChanged   (Environment* ev, ODFrame* frame);
  285.  
  286.     // • Memory Management •
  287.  
  288.     // • Part Activation •
  289.     ODBoolean    BeginRelinquishFocus (Environment* ev, ODTypeToken focus, ODFrame* ownerFrame,
  290.                                                        ODFrame* proposedFrame);
  291.     void        CommitRelinquishFocus(Environment* ev, ODTypeToken focus, ODFrame* ownerFrame,
  292.                                                        ODFrame* proposedFrame);
  293.     void        AbortRelinquishFocus (Environment* ev, ODTypeToken focus, ODFrame* ownerFrame,
  294.                                                        ODFrame* proposedFrame);
  295.     void        FocusAcquired        (Environment* ev, ODTypeToken focus, ODFrame* ownerFrame);
  296.     void        FocusLost            (Environment* ev, ODTypeToken focus, ODFrame* ownerFrame);
  297.  
  298.     // • Binding •
  299.     void        ExternalizeKinds(Environment* ev, ODTypeList* kindList);
  300.     void        ChangeKind      (Environment* ev, ODType kind);
  301.  
  302.     // • Undo •
  303.     void        UndoAction        (Environment* ev, ODActionData* actionState);
  304.     void        RedoAction        (Environment* ev, ODActionData* actionState);
  305.     void        DisposeActionState(Environment* ev, ODActionData* actionState, ODDoneState doneState);
  306.     void        WriteActionState  (Environment* ev, ODActionData* actionState,
  307.                                                     ODStorageUnitView* storageUnitView);
  308.     ODActionData    ReadActionState   (Environment* ev, ODStorageUnitView* storageUnitView);
  309.     
  310.     // • ODPersistentObject •
  311.     void        Externalize        (Environment* ev);
  312.  
  313.     void        InitPart           (Environment* ev, ODStorageUnit* storageUnit, ODPart* partWrapper);
  314.     void        InitPartFromStorage(Environment* ev, ODStorageUnit* storageUnit, ODPart* partWrapper);
  315.     void        Draw               (Environment* ev, ODFacet* facet, ODShape* invalidShape);
  316.     ODID        Open               (Environment* ev, ODFrame* frame);
  317.     void        ReleaseAll         (Environment* ev);
  318.  
  319.  
  320.     // • UI Events •
  321.     ODBoolean    HandleEvent          (Environment* ev, ODEventData* event, ODFrame* frame,
  322.                                                        ODFacet* facet, ODEventInfo* eventInfo);
  323.     //ODBoolean    HandleEventInEmbedded(Environment* ev, ODEventData* event, ODFrame* frame,
  324.     //                                                   ODFacet* facet, ODFrame* embeddedFrame,
  325.     //                                                   ODFacet* embeddedFacet);
  326.  
  327.     void        MouseEnter (Environment* ev, ODFacet* facet, ODPoint* where);
  328.     void        MouseWithin(Environment* ev, ODFacet* facet, ODPoint* where);
  329.     void        MouseLeave (Environment* ev, ODFacet* facet);
  330.     void        AdjustMenus(Environment* ev, ODFrame* frame);
  331.  
  332.  
  333. protected:
  334.  
  335.     // CAProxyPart - implementation-specific methods:
  336.  
  337.     void        UTIL_CheckAndAddProperties(        Environment*, ODStorageUnit*);
  338.     void        UTIL_CleanseContentProperty(    Environment*, ODStorageUnit*);
  339.     void        UTIL_InternalizeContent(        Environment*, ODStorageUnit*);
  340.                                                   
  341.  
  342.     void        UTIL_CommonInitPart (Environment* ev);
  343.     void        UTIL_SetDirty       (Environment* ev);
  344.  
  345.     ODBoolean    UTIL_HandleActivateEvent(Environment* ev, ODFrame* frame, ODEventData* event);
  346.  
  347.     void        UTIL_ActivateDisplayFrame(    Environment *ev, ODFrame* frame);
  348.     CFrameInfo*    UTIL_FindFrameInfoForFrame( Environment *ev, ODFrame* frame);
  349.  
  350. public:
  351.  
  352.     OrderedCollection* UTIL_GetEmbeddedFrames(Environment *ev);
  353.  
  354.  
  355.  
  356. // •ProxyPart Extension methods
  357.  
  358. public:
  359. //    Drag & Drop callback registry for CAProxyPart <==> CALib
  360.     OSErr         EXTN_SetDragReceiveHandler(        Environment* ev,
  361.                                                 DragReceiveHandler receiveHandler,
  362.                                                 void*    handlerRefCon);
  363.                                 
  364.     OSErr         EXTN_SetDragTrackingHandler(    Environment*        ev,
  365.                                                 DragTrackingHandler trackingHandler,
  366.                                                 void*                handlerRefCon);
  367.  
  368.     OSErr         EXTN_SetDragSendProc(            Environment*        ev,
  369.                                                 DragSendDataProc    sendProc,
  370.                                                 void*                dragSendRefCon );
  371.  
  372.  
  373.     void         EXTN_InstallCAWindowActivateHandler(    Environment* ev,
  374.                                                         CAWindowActivateHandlerUPP theHandler);
  375.  
  376.     void        EXTN_InstallCAFocusHandlers(    Environment* ev,
  377.                                                 CAFocusAcquiredProcUPP aquiredHandler,
  378.                                                 CAFocusLostProcUPP        lostHandler,
  379.                                                 CADocumentRef        docRef);
  380.  
  381.     void         EXTN_InstallCAAdjustBorderHandler( Environment* ev,
  382.                                     CAProxyHookAdjustBorder    theHook,
  383.                                     CAAdjustBorderProc        theHandler);
  384.  
  385.                                 
  386.     void        EXTN_InstallCAFrameShapeRequestHandler(    Environment* ev,
  387.                                                         CAProxyHookFrameShapeRequest theHook,
  388.                                                         CAFrameShapeRequestHandler theHandler);
  389.                                                                                                                 
  390.     void        EXTN_InstallCACanvasUpdatedHandler(        Environment* ev,
  391.                                                         CACanvasUpdatedProcUPP     theHandler);
  392.     
  393.  
  394.     void        EXTN_AddFrame(            Environment* ev, ODFrame* frame);
  395.     void        EXTN_RemoveFrame(        Environment* ev, ODFrame* frame);
  396.     void         EXTN_GetLastEventInfo(    Environment* ev,
  397.                                         ODEventInfo* eventInfo);
  398.  
  399. // • Class instance vars...
  400. private:
  401.  
  402.     Boolean                    fDirty;
  403.     Boolean                    fReadOnlyStorage;
  404.     CADocumentRef            fCADocumentRef;
  405.     
  406.     ODMenuBar*                 fMenuBar;
  407.  
  408.     ODPart*                    fSelf;                // Passed into InitPart and InitPartFromStorage.
  409.     FacetList                fFacets;            // List of all my visible facets
  410.     ODFrame*                fActiveFrame;        // set when window is deactivated when embedded
  411.                                                 // frame is active
  412.     
  413.     // CAProxyPart - implementation-specific fields:
  414.  
  415.     ODShape*                        fActiveBorderShape;
  416.  
  417.     CDisplayFrameInfo*                fDisplayFrame;            // Only 1 for now
  418.     OrderedCollection*                fEmbeddedFrames;
  419.     
  420.     // ProxyPart extension support
  421.     
  422.     CAProxyExtension*                fProxyExt;
  423.  
  424.     DragTrackingHandlerUPP            fCADnDTrackHnd;
  425.     void*                            fTrackRefCon;
  426.     DragReceiveHandlerUPP            fCADnDReceiveHnd;
  427.     void*                            fReceiveRefCon;
  428.     
  429.     CAWindowActivateHandlerUPP        fCAWindowActivateHandler;
  430.     CAFocusAcquiredProcUPP            fCAFocusAquiredHandler;
  431.     CAFocusLostProcUPP                 fCAFocusLostHandler;
  432.     CAAdjustBorderProc                fCAAdjustBorderHandler;
  433.     CAProxyHookAdjustBorder            fCAAdjustBorderHook;
  434.     CACanvasUpdatedProcUPP            fCACanvasUpdatedHandler;
  435.     
  436.     CAFrameShapeRequestHandler        fCAFrameShapeRequestHandler;
  437.     CAProxyHookFrameShapeRequest    fCAFrameShapeRequestHook;
  438.     
  439.     ODEventInfo                        fLastEventInfo;
  440.     
  441. };
  442.  
  443. #endif
  444.  
  445.